#!/bin/bash

title="Instalação do RailsTimeClock"
n=8

# Start installation

kdialog --warningcontinuecancel="Olá! Bem-vindo à instalação do RailsTimeClock. A seguir, será verificado se o seu computador possui os requisitos necessários. Clique em Continuar para prosseguir ou Cancelar para abortar o processo." --title="$title (1/$n) - Início"
if [ $? == 0 ]
then
  echo "Go ahead"
else
  echo "Abort"
  exit 0
fi

# Checking application dependencies

dependencies="ruby mysql"
for d in $dependencies
do
  echo "Checking for $d..."
  if (which $d 2> /dev/null)
  then
    echo "Found $d"
  else
    kdialog --error="$d não encontrado" --title="$title (2/$n) - Checando dependências"
    exit 0
  fi
done
kdialog --warningcontinuecancel="Todas as dependências checadas! Antes de prosseguir, verifique sua conexão com a internet, pois será necessário efetuar o download de alguns arquivos." --title="$title (2/$n) - Dependências checadas"
if [ $? == 0 ]
then
  echo "Go ahead"
else
  echo "Abort"
  exit 0
fi

# Download application code and rails

tmpdir=$(mktemp -d)

echo "Downloading code..."

# Download Rails

#url='http://files.rubyforge.vm.bytemark.co.uk/rails/rails-2.2.2.zip'
url='http://localhost/teste/rails.zip'
size=$(curl -sI $url | grep Content-Length | sed 's/[^0-9]//g')
echo "File size is $size bytes"
outfile="$tmpdir/rails.zip"
rm -f $outfile
dcopRef=$(kdialog --title="$title (3/$n) - Baixando arquivos" --progressbar "Baixando o Rails 2.2.2 ($size bytes), aguarde..." 100)
dcop $dcopRef showCancelButton true
wget $url -O $outfile &
wgetpid=$!
until test "true" = $(dcop $dcopRef wasCancelled)
do
  sleep 1
  gotten=$(du -b "$outfile" | sed 's/\s\+.*//g')
	inc=$((gotten*100/size))
  dcop $dcopRef setProgress $inc
	if [ $gotten == $size ]; then break; fi
done
kill -9 $wgetpid
dcop $dcopRef close

kdialog --title="$title (3/$n) - Baixando arquivos" --msgbox="Rails 2.2.2 baixado com sucesso!"

# Download application

url2='http://ufba-dcc-works.googlecode.com/files/timeclock-latest.zip'
size2=$(curl -sI $url2 | grep Content-Length | sed 's/[^0-9]//g')
echo "File size is $size2 bytes"
outfile2="$tmpdir/timeclock.zip"
rm -f $outfile2
dcopRef2=$(kdialog --title="$title (3/$n) - Baixando arquivos" --progressbar "Baixando o RailsTimeClock ($size2 bytes), aguarde..." 100)
dcop $dcopRef2 showCancelButton true
wget $url2 -O $outfile2 &
wgetpid2=$!
until test "true" = $(dcop $dcopRef2 wasCancelled)
do
  sleep 1
  gotten2=$(du -b "$outfile2" | sed 's/\s\+.*//g')
	inc2=$((gotten2*100/size2))
  dcop $dcopRef2 setProgress $inc2
	if [ $gotten2 == $size2 ]; then break; fi
done
kill -9 $wgetpid2
dcop $dcopRef2 close

# Files downloaded

kdialog --title="$title (3/$n) - Arquivos baixados" --msgbox="Todos os arquivos baixados com sucesso!"

# Unzip downloaded files and organize them

dcopRef=$(kdialog --title="$title (4/$n) - Descompactando arquivos" --progressbar "Descompactando arquivos baixados, aguarde..." 10)
dcop $dcopRef showCancelButton true
finished="$tmpdir/zipend"
(cd $tmpdir && unzip rails.zip && unzip timeclock.zip && touch $finished) &
until test "true" = $(dcop $dcopRef wasCancelled)
do
  sleep 1
	inc=$(($(dcop $dcopRef progress) + 1))
  dcop $dcopRef setProgress $inc
	if [ -f $finished  ]; then break; fi
done
dcop $dcopRef close
mv "$tmpdir/rails/vendor/rails" "$tmpdir/timeclock/vendor/"
app="$tmpdir/timeclock"

# Prompt for path and copy files do destiny

insdir=$(kdialog --title="$title (5/$n) - Selecione a pasta onde deseja instalar a aplicação" --getexistingdirectory ~/)
dirname=$(kdialog --title="$title (5/$n) - Nome da pasta da aplicação" --inputbox "Digite o nome do diretório a ser criado em $insdir" "railstimeclock")
target="$insdir/$dirname"
echo "Target is $target"
cp -r $app $target

# Prompt for database configuration

dbname=$(kdialog --title="$title (6/$n) - Configuração do Banco de Dados MySQL" --inputbox "Nome do banco" "MATB09_caiosba")
dbuser=$(kdialog --title="$title (6/$n) - Configuração do Banco de Dados MySQL" --inputbox "Usuário" "caiosba")
dbpassword=$(kdialog --title="$title (6/$n) - Configuração do Banco de Dados MySQL" --password "Senha")
dbhost=$(kdialog --title="$title (6/$n) - Configuração do Banco de Dados MySQL" --inputbox "Host" "disciplinas.dcc.ufba.br")

configfile="$target/config/database.yml"

echo "
development:
  adapter: mysql
  database: \"$dbname\"
  username: \"$dbuser\"
  password: \"$dbpassword\"
  host: \"$dbhost\"
  pool: 5
  timeout: 500000" >> $configfile

# Create tables

kdialog --warningcontinuecancel="Arquivo de configuração gerado. A seguir as tabelas do banco de dados serão criadas com base nestas configurações. Isto pode levar algum tempo. Clique em Continuar para prosseguir ou Cancelar para abortar o processo." --title="$title (7/$n) - Criar Tabelas do Banco de Dados MySQL"
if [ $? == 0 ]
then
  echo "Tables will be created"
  rakeoutput=$(mktemp)
	dcopRef=$(kdialog --title="$title (7/$n) - Criar Tabelas do Banco de Dados MySQL" --progressbar "Criando tabelas, aguarde..." 10)
  dcop $dcopRef showCancelButton true
  finishedrake="$tmpdir/rakend"
	(cd $target && rake db:migrate:reset 2> $rakeoutput > $rakeoutput && touch $finishedrake) &
  until test "true" = $(dcop $dcopRef wasCancelled)
  do
    sleep 1
	  inc=$(($(dcop $dcopRef progress) + 1))
    dcop $dcopRef setProgress $inc
	  if [ -f $finishedrake  ]; then break; fi
  done
  dcop $dcopRef close
	kdialog --title="$title (7/$n) - Criar Tabelas do Banco de Dados MySQL" --textbox $rakeoutput 500 320 
else
  echo "Abort"
  exit 0
fi

# Finish

kdialog --title="$title (8/$n) - Fim" --msgbox="Concluído! A instalação do RailsTimeClock foi efetuada com sucesso. Acesse sua instalação em $target e inicie o servidor para começar a utilizá-la! Você conseguirá acessar o sistema com usuário 'admin' e senha '123456'. Não esqueça de alterar a senha após o acesso."

# Remove temporary files

rm -rf $tmpdir
